<!DOCTYPE HTML>

<html lang="en">
<head>

<title>SwitchUserFilter (spring-security-docs 5.6.3 API)</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../../jquery/jquery-ui.css" title="Style">
<script type="text/javascript" src="../../../../../../script.js"></script>
<script type="text/javascript" src="../../../../../../jquery/jszip/dist/jszip.min.js"></script>
<script type="text/javascript" src="../../../../../../jquery/jszip-utils/dist/jszip-utils.min.js"></script>
<!--[if IE]>
<script type="text/javascript" src="../../../../../../jquery/jszip-utils/dist/jszip-utils-ie.min.js"></script>
<![endif]-->
<script type="text/javascript" src="../../../../../../jquery/jquery-3.5.1.js"></script>
<script type="text/javascript" src="../../../../../../jquery/jquery-ui.js"></script>
</head>
<body>
<script type="text/javascript"><!--
    try {
        if (location.href.indexOf('is-external=true') == -1) {
            parent.document.title="SwitchUserFilter (spring-security-docs 5.6.3 API)";
        }
    }
    catch(err) {
    }
//-->
var data = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10,"i20":10,"i21":10};
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
var tableTab = "tableTab";
var activeTableTab = "activeTableTab";
var pathtoroot = "../../../../../../";
var useModuleDirectories = true;
loadScripts(document, 'script');</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<header role="banner">
<nav role="navigation">
<div class="fixedNav">

<div class="topNav"><a id="navbar.top">

</a>
<div class="skipNav"><a href="SwitchUserFilter.html#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a id="navbar.top.firstrow">

</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../../../index.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../../../../../allclasses.html">All&nbsp;Classes</a></li>
</ul>
<ul class="navListSearch">
<li><label for="search">SEARCH:</label>
<input type="text" id="search" value="search" disabled="disabled">
<input type="reset" id="reset" value="reset" disabled="disabled">
</li>
</ul>
<div>
<script type="text/javascript"><!--
  allClassesLink = document.getElementById("allclasses_navbar_top");
  if(window==top) {
    allClassesLink.style.display = "block";
  }
  else {
    allClassesLink.style.display = "none";
  }
  //-->
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li><a href="SwitchUserFilter.html#field.summary">Field</a>&nbsp;|&nbsp;</li>
<li><a href="SwitchUserFilter.html#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="SwitchUserFilter.html#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li><a href="SwitchUserFilter.html#field.detail">Field</a>&nbsp;|&nbsp;</li>
<li><a href="SwitchUserFilter.html#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="SwitchUserFilter.html#method.detail">Method</a></li>
</ul>
</div>
<a id="skip.navbar.top">

</a></div>

</div>
<div class="navPadding">&nbsp;</div>
<script type="text/javascript"><!--
$('.navPadding').css('padding-top', $('.fixedNav').css("height"));
//-->
</script>
</nav>
</header>

<main role="main">
<div class="header">
<div class="subTitle"><span class="packageLabelInType">Package</span>&nbsp;<a href="package-summary.html">org.springframework.security.web.authentication.switchuser</a></div>
<h2 title="Class SwitchUserFilter" class="title">Class SwitchUserFilter</h2>
</div>
<div class="contentContainer">
<ul class="inheritance">
<li>java.lang.Object</li>
<li>
<ul class="inheritance">
<li>org.springframework.web.filter.GenericFilterBean</li>
<li>
<ul class="inheritance">
<li>org.springframework.security.web.authentication.switchuser.SwitchUserFilter</li>
</ul>
</li>
</ul>
</li>
</ul>
<div class="description">
<ul class="blockList">
<li class="blockList">
<dl>
<dt>All Implemented Interfaces:</dt>
<dd><code>javax.servlet.Filter</code>, <code>org.springframework.beans.factory.Aware</code>, <code>org.springframework.beans.factory.BeanNameAware</code>, <code>org.springframework.beans.factory.DisposableBean</code>, <code>org.springframework.beans.factory.InitializingBean</code>, <code>org.springframework.context.ApplicationEventPublisherAware</code>, <code>org.springframework.context.EnvironmentAware</code>, <code>org.springframework.context.MessageSourceAware</code>, <code>org.springframework.core.env.EnvironmentCapable</code>, <code>org.springframework.web.context.ServletContextAware</code></dd>
</dl>
<hr>
<pre>public class <span class="typeNameLabel">SwitchUserFilter</span>
extends org.springframework.web.filter.GenericFilterBean
implements org.springframework.context.ApplicationEventPublisherAware, org.springframework.context.MessageSourceAware</pre>
<div class="block">Switch User processing filter responsible for user context switching.
<p>
This filter is similar to Unix 'su' however for Spring Security-managed web
applications. A common use-case for this feature is the ability to allow
higher-authority users (e.g. ROLE_ADMIN) to switch to a regular user (e.g. ROLE_USER).
<p>
This filter assumes that the user performing the switch will be required to be logged
in as normal (i.e. as a ROLE_ADMIN user). The user will then access a page/controller
that enables the administrator to specify who they wish to become (see
<code>switchUserUrl</code>).
<p>
<b>Note: This URL will be required to have appropriate security constraints configured
so that only users of that role can access it (e.g. ROLE_ADMIN).</b>
<p>
On a successful switch, the user's <code>SecurityContext</code> will be updated to
reflect the specified user and will also contain an additional
<a href="SwitchUserGrantedAuthority.html" title="class in org.springframework.security.web.authentication.switchuser"><code>SwitchUserGrantedAuthority</code></a>
which contains the original user. Before switching, a check will be made on whether the
user is already currently switched, and any current switch will be exited to prevent
"nested" switches.
<p>
To 'exit' from a user context, the user needs to access a URL (see
<code>exitUserUrl</code>) that will switch back to the original user as identified by
the <code>ROLE_PREVIOUS_ADMINISTRATOR</code>.
<p>
To configure the Switch User Processing Filter, create a bean definition for the Switch
User processing filter and add to the filterChainProxy. Note that the filter must come
<b>after</b> the <tt>FilterSecurityInteceptor</tt> in the chain, in order to apply the
correct constraints to the <tt>switchUserUrl</tt>. Example:
<pre> &lt;bean id="switchUserProcessingFilter" class="org.springframework.security.web.authentication.switchuser.SwitchUserFilter"&gt;
    &lt;property name="userDetailsService" ref="userDetailsService" /&gt;
    &lt;property name="switchUserUrl" value="/login/impersonate" /&gt;
    &lt;property name="exitUserUrl" value="/logout/impersonate" /&gt;
    &lt;property name="targetUrl" value="/index.jsp" /&gt;
 &lt;/bean&gt;
 </pre></div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="SwitchUserGrantedAuthority.html" title="class in org.springframework.security.web.authentication.switchuser"><code>SwitchUserGrantedAuthority</code></a></dd>
</dl>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">

<section role="region">
<ul class="blockList">
<li class="blockList"><a id="field.summary">

</a>
<h3>Field Summary</h3>
<table class="memberSummary">
<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colSecond" scope="col">Field</th>
<th class="colLast" scope="col">Description</th>
</tr>
<tr class="altColor">
<td class="colFirst"><code>protected org.springframework.context.support.MessageSourceAccessor</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="SwitchUserFilter.html#messages">messages</a></span></code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>static java.lang.String</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="SwitchUserFilter.html#ROLE_PREVIOUS_ADMINISTRATOR">ROLE_PREVIOUS_ADMINISTRATOR</a></span></code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static java.lang.String</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="SwitchUserFilter.html#SPRING_SECURITY_SWITCH_USERNAME_KEY">SPRING_SECURITY_SWITCH_USERNAME_KEY</a></span></code></th>
<td class="colLast">&nbsp;</td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a id="fields.inherited.from.class.org.springframework.web.filter.GenericFilterBean">

</a>
<h3>Fields inherited from class&nbsp;org.springframework.web.filter.GenericFilterBean</h3>
<code>logger</code></li>
</ul>
</li>
</ul>
</section>

<section role="region">
<ul class="blockList">
<li class="blockList"><a id="constructor.summary">

</a>
<h3>Constructor Summary</h3>
<table class="memberSummary">
<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Constructor</th>
<th class="colLast" scope="col">Description</th>
</tr>
<tr class="altColor">
<th class="colConstructorName" scope="row"><code><span class="memberNameLink"><a href="SwitchUserFilter.html#%3Cinit%3E()">SwitchUserFilter</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
</table>
</li>
</ul>
</section>

<section role="region">
<ul class="blockList">
<li class="blockList"><a id="method.summary">

</a>
<h3>Method Summary</h3>
<table class="memberSummary">
<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colSecond" scope="col">Method</th>
<th class="colLast" scope="col">Description</th>
</tr>
<tr id="i0" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="SwitchUserFilter.html#afterPropertiesSet()">afterPropertiesSet</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code>protected <a href="../../../core/Authentication.html" title="interface in org.springframework.security.core">Authentication</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="SwitchUserFilter.html#attemptExitUser(javax.servlet.http.HttpServletRequest)">attemptExitUser</a></span>&#8203;(javax.servlet.http.HttpServletRequest&nbsp;request)</code></th>
<td class="colLast">
<div class="block">Attempt to exit from an already switched user.</div>
</td>
</tr>
<tr id="i2" class="altColor">
<td class="colFirst"><code>protected <a href="../../../core/Authentication.html" title="interface in org.springframework.security.core">Authentication</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="SwitchUserFilter.html#attemptSwitchUser(javax.servlet.http.HttpServletRequest)">attemptSwitchUser</a></span>&#8203;(javax.servlet.http.HttpServletRequest&nbsp;request)</code></th>
<td class="colLast">
<div class="block">Attempt to switch to another user.</div>
</td>
</tr>
<tr id="i3" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="SwitchUserFilter.html#doFilter(javax.servlet.ServletRequest,javax.servlet.ServletResponse,javax.servlet.FilterChain)">doFilter</a></span>&#8203;(javax.servlet.ServletRequest&nbsp;request,
javax.servlet.ServletResponse&nbsp;response,
javax.servlet.FilterChain&nbsp;chain)</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i4" class="altColor">
<td class="colFirst"><code>protected boolean</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="SwitchUserFilter.html#requiresExitUser(javax.servlet.http.HttpServletRequest)">requiresExitUser</a></span>&#8203;(javax.servlet.http.HttpServletRequest&nbsp;request)</code></th>
<td class="colLast">
<div class="block">Checks the request URI for the presence of <tt>exitUserUrl</tt>.</div>
</td>
</tr>
<tr id="i5" class="rowColor">
<td class="colFirst"><code>protected boolean</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="SwitchUserFilter.html#requiresSwitchUser(javax.servlet.http.HttpServletRequest)">requiresSwitchUser</a></span>&#8203;(javax.servlet.http.HttpServletRequest&nbsp;request)</code></th>
<td class="colLast">
<div class="block">Checks the request URI for the presence of <tt>switchUserUrl</tt>.</div>
</td>
</tr>
<tr id="i6" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="SwitchUserFilter.html#setApplicationEventPublisher(org.springframework.context.ApplicationEventPublisher)">setApplicationEventPublisher</a></span>&#8203;(org.springframework.context.ApplicationEventPublisher&nbsp;eventPublisher)</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i7" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="SwitchUserFilter.html#setAuthenticationDetailsSource(org.springframework.security.authentication.AuthenticationDetailsSource)">setAuthenticationDetailsSource</a></span>&#8203;(<a href="../../../authentication/AuthenticationDetailsSource.html" title="interface in org.springframework.security.authentication">AuthenticationDetailsSource</a>&lt;javax.servlet.http.HttpServletRequest,&#8203;?&gt;&nbsp;authenticationDetailsSource)</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i8" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="SwitchUserFilter.html#setExitUserMatcher(org.springframework.security.web.util.matcher.RequestMatcher)">setExitUserMatcher</a></span>&#8203;(<a href="../../util/matcher/RequestMatcher.html" title="interface in org.springframework.security.web.util.matcher">RequestMatcher</a>&nbsp;exitUserMatcher)</code></th>
<td class="colLast">
<div class="block">Set the matcher to respond to exit user processing.</div>
</td>
</tr>
<tr id="i9" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="SwitchUserFilter.html#setExitUserUrl(java.lang.String)">setExitUserUrl</a></span>&#8203;(java.lang.String&nbsp;exitUserUrl)</code></th>
<td class="colLast">
<div class="block">Set the URL to respond to exit user processing.</div>
</td>
</tr>
<tr id="i10" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="SwitchUserFilter.html#setFailureHandler(org.springframework.security.web.authentication.AuthenticationFailureHandler)">setFailureHandler</a></span>&#8203;(<a href="../AuthenticationFailureHandler.html" title="interface in org.springframework.security.web.authentication">AuthenticationFailureHandler</a>&nbsp;failureHandler)</code></th>
<td class="colLast">
<div class="block">Used to define custom behaviour when a switch fails.</div>
</td>
</tr>
<tr id="i11" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="SwitchUserFilter.html#setMessageSource(org.springframework.context.MessageSource)">setMessageSource</a></span>&#8203;(org.springframework.context.MessageSource&nbsp;messageSource)</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i12" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="SwitchUserFilter.html#setSuccessHandler(org.springframework.security.web.authentication.AuthenticationSuccessHandler)">setSuccessHandler</a></span>&#8203;(<a href="../AuthenticationSuccessHandler.html" title="interface in org.springframework.security.web.authentication">AuthenticationSuccessHandler</a>&nbsp;successHandler)</code></th>
<td class="colLast">
<div class="block">Used to define custom behaviour on a successful switch or exit user.</div>
</td>
</tr>
<tr id="i13" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="SwitchUserFilter.html#setSwitchAuthorityRole(java.lang.String)">setSwitchAuthorityRole</a></span>&#8203;(java.lang.String&nbsp;switchAuthorityRole)</code></th>
<td class="colLast">
<div class="block">Allows the role of the switchAuthority to be customized.</div>
</td>
</tr>
<tr id="i14" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="SwitchUserFilter.html#setSwitchFailureUrl(java.lang.String)">setSwitchFailureUrl</a></span>&#8203;(java.lang.String&nbsp;switchFailureUrl)</code></th>
<td class="colLast">
<div class="block">Sets the URL to which a user should be redirected if the switch fails.</div>
</td>
</tr>
<tr id="i15" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="SwitchUserFilter.html#setSwitchUserAuthorityChanger(org.springframework.security.web.authentication.switchuser.SwitchUserAuthorityChanger)">setSwitchUserAuthorityChanger</a></span>&#8203;(<a href="SwitchUserAuthorityChanger.html" title="interface in org.springframework.security.web.authentication.switchuser">SwitchUserAuthorityChanger</a>&nbsp;switchUserAuthorityChanger)</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i16" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="SwitchUserFilter.html#setSwitchUserMatcher(org.springframework.security.web.util.matcher.RequestMatcher)">setSwitchUserMatcher</a></span>&#8203;(<a href="../../util/matcher/RequestMatcher.html" title="interface in org.springframework.security.web.util.matcher">RequestMatcher</a>&nbsp;switchUserMatcher)</code></th>
<td class="colLast">
<div class="block">Set the matcher to respond to switch user processing.</div>
</td>
</tr>
<tr id="i17" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="SwitchUserFilter.html#setSwitchUserUrl(java.lang.String)">setSwitchUserUrl</a></span>&#8203;(java.lang.String&nbsp;switchUserUrl)</code></th>
<td class="colLast">
<div class="block">Set the URL to respond to switch user processing.</div>
</td>
</tr>
<tr id="i18" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="SwitchUserFilter.html#setTargetUrl(java.lang.String)">setTargetUrl</a></span>&#8203;(java.lang.String&nbsp;targetUrl)</code></th>
<td class="colLast">
<div class="block">Sets the URL to go to after a successful switch / exit user request.</div>
</td>
</tr>
<tr id="i19" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="SwitchUserFilter.html#setUserDetailsChecker(org.springframework.security.core.userdetails.UserDetailsChecker)">setUserDetailsChecker</a></span>&#8203;(<a href="../../../core/userdetails/UserDetailsChecker.html" title="interface in org.springframework.security.core.userdetails">UserDetailsChecker</a>&nbsp;userDetailsChecker)</code></th>
<td class="colLast">
<div class="block">Sets the <a href="../../../core/userdetails/UserDetailsChecker.html" title="interface in org.springframework.security.core.userdetails"><code>UserDetailsChecker</code></a> that is called on the target user whenever the
user is switched.</div>
</td>
</tr>
<tr id="i20" class="altColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="SwitchUserFilter.html#setUserDetailsService(org.springframework.security.core.userdetails.UserDetailsService)">setUserDetailsService</a></span>&#8203;(<a href="../../../core/userdetails/UserDetailsService.html" title="interface in org.springframework.security.core.userdetails">UserDetailsService</a>&nbsp;userDetailsService)</code></th>
<td class="colLast">
<div class="block">Sets the authentication data access object.</div>
</td>
</tr>
<tr id="i21" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="SwitchUserFilter.html#setUsernameParameter(java.lang.String)">setUsernameParameter</a></span>&#8203;(java.lang.String&nbsp;usernameParameter)</code></th>
<td class="colLast">
<div class="block">Allows the parameter containing the username to be customized.</div>
</td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a id="methods.inherited.from.class.org.springframework.web.filter.GenericFilterBean">

</a>
<h3>Methods inherited from class&nbsp;org.springframework.web.filter.GenericFilterBean</h3>
<code>addRequiredProperty, createEnvironment, destroy, getEnvironment, getFilterConfig, getFilterName, getServletContext, init, initBeanWrapper, initFilterBean, setBeanName, setEnvironment, setServletContext</code></li>
</ul>
<ul class="blockList">
<li class="blockList"><a id="methods.inherited.from.class.java.lang.Object">

</a>
<h3>Methods inherited from class&nbsp;java.lang.Object</h3>
<code>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>
</ul>
</li>
</ul>
</section>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">

<section role="region">
<ul class="blockList">
<li class="blockList"><a id="field.detail">

</a>
<h3>Field Detail</h3>
<a id="SPRING_SECURITY_SWITCH_USERNAME_KEY">

</a>
<ul class="blockList">
<li class="blockList">
<h4>SPRING_SECURITY_SWITCH_USERNAME_KEY</h4>
<pre>public static final&nbsp;java.lang.String SPRING_SECURITY_SWITCH_USERNAME_KEY</pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../../constant-values.html#org.springframework.security.web.authentication.switchuser.SwitchUserFilter.SPRING_SECURITY_SWITCH_USERNAME_KEY">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a id="ROLE_PREVIOUS_ADMINISTRATOR">

</a>
<ul class="blockList">
<li class="blockList">
<h4>ROLE_PREVIOUS_ADMINISTRATOR</h4>
<pre>public static final&nbsp;java.lang.String ROLE_PREVIOUS_ADMINISTRATOR</pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../../constant-values.html#org.springframework.security.web.authentication.switchuser.SwitchUserFilter.ROLE_PREVIOUS_ADMINISTRATOR">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a id="messages">

</a>
<ul class="blockListLast">
<li class="blockList">
<h4>messages</h4>
<pre>protected&nbsp;org.springframework.context.support.MessageSourceAccessor messages</pre>
</li>
</ul>
</li>
</ul>
</section>

<section role="region">
<ul class="blockList">
<li class="blockList"><a id="constructor.detail">

</a>
<h3>Constructor Detail</h3>
<a id="&lt;init&gt;()">

</a>
<ul class="blockListLast">
<li class="blockList">
<h4>SwitchUserFilter</h4>
<pre>public&nbsp;SwitchUserFilter()</pre>
</li>
</ul>
</li>
</ul>
</section>

<section role="region">
<ul class="blockList">
<li class="blockList"><a id="method.detail">

</a>
<h3>Method Detail</h3>
<a id="afterPropertiesSet()">

</a>
<ul class="blockList">
<li class="blockList">
<h4>afterPropertiesSet</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;afterPropertiesSet()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code>afterPropertiesSet</code>&nbsp;in interface&nbsp;<code>org.springframework.beans.factory.InitializingBean</code></dd>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code>afterPropertiesSet</code>&nbsp;in class&nbsp;<code>org.springframework.web.filter.GenericFilterBean</code></dd>
</dl>
</li>
</ul>
<a id="doFilter(javax.servlet.ServletRequest,javax.servlet.ServletResponse,javax.servlet.FilterChain)">

</a>
<ul class="blockList">
<li class="blockList">
<h4>doFilter</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;doFilter&#8203;(javax.servlet.ServletRequest&nbsp;request,
                     javax.servlet.ServletResponse&nbsp;response,
                     javax.servlet.FilterChain&nbsp;chain)
              throws java.io.IOException,
                     javax.servlet.ServletException</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code>doFilter</code>&nbsp;in interface&nbsp;<code>javax.servlet.Filter</code></dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code>java.io.IOException</code></dd>
<dd><code>javax.servlet.ServletException</code></dd>
</dl>
</li>
</ul>
<a id="attemptSwitchUser(javax.servlet.http.HttpServletRequest)">

</a>
<ul class="blockList">
<li class="blockList">
<h4>attemptSwitchUser</h4>
<pre class="methodSignature">protected&nbsp;<a href="../../../core/Authentication.html" title="interface in org.springframework.security.core">Authentication</a>&nbsp;attemptSwitchUser&#8203;(javax.servlet.http.HttpServletRequest&nbsp;request)
                                    throws <a href="../../../core/AuthenticationException.html" title="class in org.springframework.security.core">AuthenticationException</a></pre>
<div class="block">Attempt to switch to another user. If the user does not exist or is not active,
return null.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>The new <code>Authentication</code> request if successfully switched to
another user, <code>null</code> otherwise.</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="../../../core/userdetails/UsernameNotFoundException.html" title="class in org.springframework.security.core.userdetails">UsernameNotFoundException</a></code> - If the target user is not found.</dd>
<dd><code><a href="../../../authentication/LockedException.html" title="class in org.springframework.security.authentication">LockedException</a></code> - if the account is locked.</dd>
<dd><code><a href="../../../authentication/DisabledException.html" title="class in org.springframework.security.authentication">DisabledException</a></code> - If the target user is disabled.</dd>
<dd><code><a href="../../../authentication/AccountExpiredException.html" title="class in org.springframework.security.authentication">AccountExpiredException</a></code> - If the target user account is expired.</dd>
<dd><code><a href="../../../authentication/CredentialsExpiredException.html" title="class in org.springframework.security.authentication">CredentialsExpiredException</a></code> - If the target user credentials are expired.</dd>
<dd><code><a href="../../../core/AuthenticationException.html" title="class in org.springframework.security.core">AuthenticationException</a></code></dd>
</dl>
</li>
</ul>
<a id="attemptExitUser(javax.servlet.http.HttpServletRequest)">

</a>
<ul class="blockList">
<li class="blockList">
<h4>attemptExitUser</h4>
<pre class="methodSignature">protected&nbsp;<a href="../../../core/Authentication.html" title="interface in org.springframework.security.core">Authentication</a>&nbsp;attemptExitUser&#8203;(javax.servlet.http.HttpServletRequest&nbsp;request)
                                  throws <a href="../../../authentication/AuthenticationCredentialsNotFoundException.html" title="class in org.springframework.security.authentication">AuthenticationCredentialsNotFoundException</a></pre>
<div class="block">Attempt to exit from an already switched user.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>request</code> - The http servlet request</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>The original <code>Authentication</code> object or <code>null</code>
otherwise.</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="../../../authentication/AuthenticationCredentialsNotFoundException.html" title="class in org.springframework.security.authentication">AuthenticationCredentialsNotFoundException</a></code> - If no
<code>Authentication</code> associated with this request.</dd>
</dl>
</li>
</ul>
<a id="requiresExitUser(javax.servlet.http.HttpServletRequest)">

</a>
<ul class="blockList">
<li class="blockList">
<h4>requiresExitUser</h4>
<pre class="methodSignature">protected&nbsp;boolean&nbsp;requiresExitUser&#8203;(javax.servlet.http.HttpServletRequest&nbsp;request)</pre>
<div class="block">Checks the request URI for the presence of <tt>exitUserUrl</tt>.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>request</code> - The http servlet request</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd><code>true</code> if the request requires a exit user, <code>false</code>
otherwise.</dd>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="SwitchUserFilter.html#setExitUserUrl(java.lang.String)"><code>setExitUserUrl(String)</code></a></dd>
</dl>
</li>
</ul>
<a id="requiresSwitchUser(javax.servlet.http.HttpServletRequest)">

</a>
<ul class="blockList">
<li class="blockList">
<h4>requiresSwitchUser</h4>
<pre class="methodSignature">protected&nbsp;boolean&nbsp;requiresSwitchUser&#8203;(javax.servlet.http.HttpServletRequest&nbsp;request)</pre>
<div class="block">Checks the request URI for the presence of <tt>switchUserUrl</tt>.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>request</code> - The http servlet request</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd><code>true</code> if the request requires a switch, <code>false</code>
otherwise.</dd>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="SwitchUserFilter.html#setSwitchUserUrl(java.lang.String)"><code>setSwitchUserUrl(String)</code></a></dd>
</dl>
</li>
</ul>
<a id="setApplicationEventPublisher(org.springframework.context.ApplicationEventPublisher)">

</a>
<ul class="blockList">
<li class="blockList">
<h4>setApplicationEventPublisher</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;setApplicationEventPublisher&#8203;(org.springframework.context.ApplicationEventPublisher&nbsp;eventPublisher)
                                  throws org.springframework.beans.BeansException</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code>setApplicationEventPublisher</code>&nbsp;in interface&nbsp;<code>org.springframework.context.ApplicationEventPublisherAware</code></dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code>org.springframework.beans.BeansException</code></dd>
</dl>
</li>
</ul>
<a id="setAuthenticationDetailsSource(org.springframework.security.authentication.AuthenticationDetailsSource)">

</a>
<ul class="blockList">
<li class="blockList">
<h4>setAuthenticationDetailsSource</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;setAuthenticationDetailsSource&#8203;(<a href="../../../authentication/AuthenticationDetailsSource.html" title="interface in org.springframework.security.authentication">AuthenticationDetailsSource</a>&lt;javax.servlet.http.HttpServletRequest,&#8203;?&gt;&nbsp;authenticationDetailsSource)</pre>
</li>
</ul>
<a id="setMessageSource(org.springframework.context.MessageSource)">

</a>
<ul class="blockList">
<li class="blockList">
<h4>setMessageSource</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;setMessageSource&#8203;(org.springframework.context.MessageSource&nbsp;messageSource)</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code>setMessageSource</code>&nbsp;in interface&nbsp;<code>org.springframework.context.MessageSourceAware</code></dd>
</dl>
</li>
</ul>
<a id="setUserDetailsService(org.springframework.security.core.userdetails.UserDetailsService)">

</a>
<ul class="blockList">
<li class="blockList">
<h4>setUserDetailsService</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;setUserDetailsService&#8203;(<a href="../../../core/userdetails/UserDetailsService.html" title="interface in org.springframework.security.core.userdetails">UserDetailsService</a>&nbsp;userDetailsService)</pre>
<div class="block">Sets the authentication data access object.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>userDetailsService</code> - The <tt>UserDetailsService</tt> which will be used to
load information for the user that is being switched to.</dd>
</dl>
</li>
</ul>
<a id="setExitUserUrl(java.lang.String)">

</a>
<ul class="blockList">
<li class="blockList">
<h4>setExitUserUrl</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;setExitUserUrl&#8203;(java.lang.String&nbsp;exitUserUrl)</pre>
<div class="block">Set the URL to respond to exit user processing. This is a shortcut for
<a href="SwitchUserFilter.html#setExitUserMatcher(org.springframework.security.web.util.matcher.RequestMatcher)"><code>setExitUserMatcher(RequestMatcher)</code></a>.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>exitUserUrl</code> - The exit user URL.</dd>
</dl>
</li>
</ul>
<a id="setExitUserMatcher(org.springframework.security.web.util.matcher.RequestMatcher)">

</a>
<ul class="blockList">
<li class="blockList">
<h4>setExitUserMatcher</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;setExitUserMatcher&#8203;(<a href="../../util/matcher/RequestMatcher.html" title="interface in org.springframework.security.web.util.matcher">RequestMatcher</a>&nbsp;exitUserMatcher)</pre>
<div class="block">Set the matcher to respond to exit user processing.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>exitUserMatcher</code> - The exit matcher to use.</dd>
</dl>
</li>
</ul>
<a id="setSwitchUserUrl(java.lang.String)">

</a>
<ul class="blockList">
<li class="blockList">
<h4>setSwitchUserUrl</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;setSwitchUserUrl&#8203;(java.lang.String&nbsp;switchUserUrl)</pre>
<div class="block">Set the URL to respond to switch user processing. This is a shortcut for
<a href="SwitchUserFilter.html#setSwitchUserMatcher(org.springframework.security.web.util.matcher.RequestMatcher)"><code>setSwitchUserMatcher(RequestMatcher)</code></a></div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>switchUserUrl</code> - The switch user URL.</dd>
</dl>
</li>
</ul>
<a id="setSwitchUserMatcher(org.springframework.security.web.util.matcher.RequestMatcher)">

</a>
<ul class="blockList">
<li class="blockList">
<h4>setSwitchUserMatcher</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;setSwitchUserMatcher&#8203;(<a href="../../util/matcher/RequestMatcher.html" title="interface in org.springframework.security.web.util.matcher">RequestMatcher</a>&nbsp;switchUserMatcher)</pre>
<div class="block">Set the matcher to respond to switch user processing.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>switchUserMatcher</code> - The switch user matcher.</dd>
</dl>
</li>
</ul>
<a id="setTargetUrl(java.lang.String)">

</a>
<ul class="blockList">
<li class="blockList">
<h4>setTargetUrl</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;setTargetUrl&#8203;(java.lang.String&nbsp;targetUrl)</pre>
<div class="block">Sets the URL to go to after a successful switch / exit user request. Use
<a href="SwitchUserFilter.html#setSuccessHandler(org.springframework.security.web.authentication.AuthenticationSuccessHandler)"><code>setSuccessHandler</code></a> instead
if you need more customized behaviour.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>targetUrl</code> - The target url.</dd>
</dl>
</li>
</ul>
<a id="setSuccessHandler(org.springframework.security.web.authentication.AuthenticationSuccessHandler)">

</a>
<ul class="blockList">
<li class="blockList">
<h4>setSuccessHandler</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;setSuccessHandler&#8203;(<a href="../AuthenticationSuccessHandler.html" title="interface in org.springframework.security.web.authentication">AuthenticationSuccessHandler</a>&nbsp;successHandler)</pre>
<div class="block">Used to define custom behaviour on a successful switch or exit user.
<p>
Can be used instead of setting <tt>targetUrl</tt>.</div>
</li>
</ul>
<a id="setSwitchFailureUrl(java.lang.String)">

</a>
<ul class="blockList">
<li class="blockList">
<h4>setSwitchFailureUrl</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;setSwitchFailureUrl&#8203;(java.lang.String&nbsp;switchFailureUrl)</pre>
<div class="block">Sets the URL to which a user should be redirected if the switch fails. For example,
this might happen because the account they are attempting to switch to is invalid
(the user doesn't exist, account is locked etc).
<p>
If not set, an error message will be written to the response.
<p>
Use <a href="SwitchUserFilter.html#setFailureHandler(org.springframework.security.web.authentication.AuthenticationFailureHandler)"><code>failureHandler</code></a> instead
if you need more customized behaviour.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>switchFailureUrl</code> - the url to redirect to.</dd>
</dl>
</li>
</ul>
<a id="setFailureHandler(org.springframework.security.web.authentication.AuthenticationFailureHandler)">

</a>
<ul class="blockList">
<li class="blockList">
<h4>setFailureHandler</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;setFailureHandler&#8203;(<a href="../AuthenticationFailureHandler.html" title="interface in org.springframework.security.web.authentication">AuthenticationFailureHandler</a>&nbsp;failureHandler)</pre>
<div class="block">Used to define custom behaviour when a switch fails.
<p>
Can be used instead of setting <tt>switchFailureUrl</tt>.</div>
</li>
</ul>
<a id="setSwitchUserAuthorityChanger(org.springframework.security.web.authentication.switchuser.SwitchUserAuthorityChanger)">

</a>
<ul class="blockList">
<li class="blockList">
<h4>setSwitchUserAuthorityChanger</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;setSwitchUserAuthorityChanger&#8203;(<a href="SwitchUserAuthorityChanger.html" title="interface in org.springframework.security.web.authentication.switchuser">SwitchUserAuthorityChanger</a>&nbsp;switchUserAuthorityChanger)</pre>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>switchUserAuthorityChanger</code> - to use to fine-tune the authorities granted to
subclasses (may be null if SwitchUserFilter should not fine-tune the authorities)</dd>
</dl>
</li>
</ul>
<a id="setUserDetailsChecker(org.springframework.security.core.userdetails.UserDetailsChecker)">

</a>
<ul class="blockList">
<li class="blockList">
<h4>setUserDetailsChecker</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;setUserDetailsChecker&#8203;(<a href="../../../core/userdetails/UserDetailsChecker.html" title="interface in org.springframework.security.core.userdetails">UserDetailsChecker</a>&nbsp;userDetailsChecker)</pre>
<div class="block">Sets the <a href="../../../core/userdetails/UserDetailsChecker.html" title="interface in org.springframework.security.core.userdetails"><code>UserDetailsChecker</code></a> that is called on the target user whenever the
user is switched.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>userDetailsChecker</code> - the <a href="../../../core/userdetails/UserDetailsChecker.html" title="interface in org.springframework.security.core.userdetails"><code>UserDetailsChecker</code></a> that checks the status of
the user that is being switched to. Defaults to
<a href="../../../authentication/AccountStatusUserDetailsChecker.html" title="class in org.springframework.security.authentication"><code>AccountStatusUserDetailsChecker</code></a>.</dd>
</dl>
</li>
</ul>
<a id="setUsernameParameter(java.lang.String)">

</a>
<ul class="blockList">
<li class="blockList">
<h4>setUsernameParameter</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;setUsernameParameter&#8203;(java.lang.String&nbsp;usernameParameter)</pre>
<div class="block">Allows the parameter containing the username to be customized.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>usernameParameter</code> - the parameter name. Defaults to <code>username</code></dd>
</dl>
</li>
</ul>
<a id="setSwitchAuthorityRole(java.lang.String)">

</a>
<ul class="blockListLast">
<li class="blockList">
<h4>setSwitchAuthorityRole</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;setSwitchAuthorityRole&#8203;(java.lang.String&nbsp;switchAuthorityRole)</pre>
<div class="block">Allows the role of the switchAuthority to be customized.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>switchAuthorityRole</code> - the role name. Defaults to
<a href="SwitchUserFilter.html#ROLE_PREVIOUS_ADMINISTRATOR"><code>ROLE_PREVIOUS_ADMINISTRATOR</code></a></dd>
</dl>
</li>
</ul>
</li>
</ul>
</section>
</li>
</ul>
</div>
</div>
</main>

<footer role="contentinfo">
<nav role="navigation">

<div class="bottomNav"><a id="navbar.bottom">

</a>
<div class="skipNav"><a href="SwitchUserFilter.html#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a id="navbar.bottom.firstrow">

</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../../../index.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../../../../../allclasses.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
  allClassesLink = document.getElementById("allclasses_navbar_bottom");
  if(window==top) {
    allClassesLink.style.display = "block";
  }
  else {
    allClassesLink.style.display = "none";
  }
  //-->
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li><a href="SwitchUserFilter.html#field.summary">Field</a>&nbsp;|&nbsp;</li>
<li><a href="SwitchUserFilter.html#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="SwitchUserFilter.html#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li><a href="SwitchUserFilter.html#field.detail">Field</a>&nbsp;|&nbsp;</li>
<li><a href="SwitchUserFilter.html#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="SwitchUserFilter.html#method.detail">Method</a></li>
</ul>
</div>
<a id="skip.navbar.bottom">

</a></div>

</nav>
</footer>
<script>if (window.parent == window) {(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)})(window,document,'script','//www.google-analytics.com/analytics.js','ga');ga('create', 'UA-2728886-23', 'auto', {'siteSpeedSampleRate': 100});ga('send', 'pageview');}</script><script defer src="https://static.cloudflareinsights.com/beacon.min.js/v652eace1692a40cfa3763df669d7439c1639079717194" integrity="sha512-Gi7xpJR8tSkrpF7aordPZQlW2DLtzUlZcumS8dMQjwDHEnw9I7ZLyiOj/6tZStRBGtGgN6ceN6cMH8z7etPGlw==" data-cf-beacon='{"rayId":"7040ded1fcbb97cf","token":"bffcb8a918ae4755926f76178bfbd26b","version":"2021.12.0","si":100}' crossorigin="anonymous"></script>
</body>
</html>
